package edu.upc.inmobiliaria.repository.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import edu.upc.inmobiliaria.domain.TipoOperacionBean;
import edu.upc.inmobiliaria.domain.UbigeoBean;
import edu.upc.inmobiliaria.repository.UbigeoRepository;

@Repository
public class JdbcUbigeoRepository implements UbigeoRepository {

	private SimpleJdbcTemplate simpleJdbcTemplate;

	@Autowired
	public JdbcUbigeoRepository(DataSource dataSource) {
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}

	@Override
	public UbigeoBean getUbigeo(int id) {
		UbigeoBean ubigeo = null;
		try {
			String sql = "SELECT ID,DIRECCION,URBANIZACION,DISTRITO,PROVINCIA,DEPARTAMENTO "
					+ "FROM T_UBIGEO WHERE ID=?";
			RowMapper<UbigeoBean> mapper = new RowMapper<UbigeoBean>() {
				public UbigeoBean mapRow(ResultSet rs, int rowNum)
						throws SQLException {
					int id = rs.getInt("ID");
					String direccion = rs.getString("DIRECCION");
					String urbanizacion = rs.getString("URBANIZACION");
					String distrito = rs.getString("DISTRITO");
					String provincia = rs.getString("PROVINCIA");
					String departamento = rs.getString("DEPARTAMENTO");
					UbigeoBean ubigeo = UbigeoBean.crearUbigeo(id, direccion,
							urbanizacion, distrito, provincia, departamento);
					return ubigeo;
				}
			};

			ubigeo = this.simpleJdbcTemplate.queryForObject(sql, mapper, id);
		} catch (EmptyResultDataAccessException ex) {
			return null;
		}
		return ubigeo;
	}

	@Override
	public boolean registrar(UbigeoBean ubigeobean, String string) {
		try {
			String sql = "INSERT INTO T_UBIGEO (ID,DIRECCION,URBANIZACION,DISTRITO,PROVINCIA,DEPARTAMENTO) "
					+ "VALUES (?,?,?,?,?,?)";
			this.simpleJdbcTemplate.update(sql, ubigeobean.getId(),
					ubigeobean.getDireccion(), ubigeobean.getUrbanizacion(),
					ubigeobean.getDistrito(), ubigeobean.getProvincia(),
					ubigeobean.getDepartamento());
			return true;
		} catch (DataAccessException e) {
			return false;
		}
	}

	@Override
	public boolean actualizar(UbigeoBean ubigeobean, String string) {
		try {
			String sql = "UPDATE T_UBIGEO SET DIRECCION=?,URBANIZACION=?,DISTRITO=?,"
					+ "PROVINCIA=?,DEPARTAMENTO=? WHERE ID=?";
			this.simpleJdbcTemplate.update(sql, ubigeobean.getDireccion(),
					ubigeobean.getUrbanizacion(), ubigeobean.getDistrito(),
					ubigeobean.getProvincia(), ubigeobean.getDepartamento(),
					ubigeobean.getId());
			return true;
		} catch (DataAccessException e) {
			return false;
		}
	}

	@Override
	public boolean eliminar(int i, String string) {
		try {
			String sql = "DELETE FROM T_UBIGEO WHERE ID=?";
			this.simpleJdbcTemplate.update(sql, i);
			return true;
		} catch (DataAccessException e) {
			return false;
		}
	}

	@Override
	public boolean actualizarVenta(int id, int nuevoValor) {
		// TODO Auto-generated method stub
		return false;
	}

}
